import { AxiosError } from "axios";
import { ValidationResult } from "../types/apiTypes";

export const getErrorMessage = (error: AxiosError): string => {
  if (error.code === "ECONNREFUSED") {
    return "无法连接到服务器，服务可能未启动";
  }
  if (error.code === "ETIMEDOUT") {
    return "连接超时，请检查服务器地址或网络状况";
  }
  if (error.code === "ERR_BAD_REQUEST") {
    return "服务器返回了错误的响应，但服务是在线的";
  }
  if (error.code === "ERR_NETWORK") {
    return "网络错误，请检查网络连接";
  }
  if (error.code === "ENOTFOUND") {
    return "无法解析服务器地址，请检查 URL 是否正确";
  }
  return error.message;
};

/**
 * 处理 Axios 错误并返回标准化的验证结果
 */
export const handleAxiosError = (
  error: AxiosError,
  serviceType: string
): ValidationResult => {
  console.log(error);

  if (
    error.response?.status !== undefined &&
    error.response.status >= 200 &&
    error.response.status < 500
  ) {
    return {
      isAvailable: true,
      details: {
        message: `${serviceType}服务可访问，但可能需要认证或存在其他限制`,
        statusCode: error.response.status,
        errorCode: error.code,
      },
    };
  }

  return {
    isAvailable: false,
    error: getErrorMessage(error),
    details: {
      message: error.message,
      errorCode: error.code,
    },
  };
};
